/**
 * 根据指定的卷积矩阵（m）按照给定偏移（offset）和除数（divisor）处理指定的图像（input）
 * @param {ImageData} input img元素对象像素数据
 * @param {Array} m 卷积矩阵
 * @param {Number} divisor 除数
 * @param {Number} offset 偏移
 * @returns {ImageDataArray}
 */
function convolutionMatrix (input, m, divisor, offset) {
    var output = document.createElement('canvas').getContext('2d').createImageData(input),
        w = input.width, h = input.height,
        iD = input.data, oD = output.data,
        divisor = divisor || 1, offset = offset || 0;

    for(var y = 1; y < h - 1; y += 1) {
        for(var x = 1; x < w - 1; x += 1) { // 非边缘像素都做以下处理

            for(var c = 0; c < 3; c += 1) {
                var i = (y * w + x) * 4 + c;
                oD[i] = offset
                +(m[0]*iD[i-w*4-4] + m[1]*iD[i-w*4] + m[2]*iD[i-w*4+4]
                + m[3]*iD[i-4] + m[4]*iD[i] + m[5]*iD[i+4]
                + m[6]*iD[i+w*4-4] + m[7]*iD[i+w*4] + m[8]*iD[i+w*4+4]) / divisor;
            }
            oD[(y * w + x) * 4 + 3] = 255; // 当前像素alpha通道不透明

        }
    }

    return output;
}